﻿using SWBetongXaydung.GUI.Common;
using SWBetongXaydung.GUI.TacNghiep;
using System;
using System.Windows.Forms;
using SWBetongXaydung.GUI.DuLieu;
using SWBetongXaydung.GUI.ThongKe;

namespace SWBetongXaydung.GUI
{
    public partial class FormMain : Form
    {
        private BaseUserControl GetActiveBaseUC()
        {
            try { return pnlMain.Controls[0] as BaseUserControl; }
            catch { return null; }
        }

        #region public DAL.Models.NguoiSuDung NguoiSuDung {get; private set;} // Người dùng đang tác nghiệp
        /// <summary>
        /// Người sử dụng hiện tại của chương trình
        /// </summary>

        public static DAL.NguoiSuDung NguoiSuDung { get; private set; }

        #endregion


        private void tmrClientClock_Tick(object sender, EventArgs e)
        {
            lblClientDateTime.Text = System.DateTime.Now.ToString("dddd, dd/MM/yyyy - HH:mm");
        }

        public FormMain()
        {
            InitializeComponent();
            DangXuat();
        }

        #region Chức năng Hệ thống
        private void miHeThong_DangNhap_Click(object sender, EventArgs e)
        {
            var frm = new HeThong.FormDangNhap();
            if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.DangNhapTheo(frm.NguoiSuDung);
            }
        }

        public void DangXuat()
        {
            NguoiSuDung = null;
            lblLoginStatus.Text = "Chưa đăng nhập";

            miHeThong_DangNhap.Visible = true;
            miHeThong_DangXuat.Visible = false;
            miHeThong_DoiMatKhau.Visible = false;
            miHeThong_QuanLyNguoiDung.Visible = false;

            miDuLieu.Visible = false;
            miTacNghiep.Visible = false;
            miThongKe.Visible = false;

            this.Text = "QUẢN LÝ BÊ TÔNG - XÂY DỰNG";
            pnlMain.Controls.Clear();
            pnlMain.Controls.Add(new HeThong.UcWelcome() { Dock = DockStyle.Fill });

        }

        public void DangNhapTheo(DAL.NguoiSuDung nguoiSuDung)
        {
            #region Cập nhật giao diện
            NguoiSuDung = nguoiSuDung;
            lblLoginStatus.Text = string.Format("Đã đăng nhập ({0} - {1})",
                NguoiSuDung.TenDangNhap, NguoiSuDung.VaiTroString);

            miHeThong_DangNhap.Visible = false;
            miHeThong_DangXuat.Visible = true;
            miHeThong_DoiMatKhau.Visible = true;
            miDuLieu.Visible = true;
            miTacNghiep.Visible = true;
            miThongKe.Visible = true;
            var isAdmin = nguoiSuDung.LaQuanTriHeThong;
            miHeThong_QuanLyNguoiDung.Visible = isAdmin;

            //miDuLieu.Visible = !isAdmin;
            //miTacNghiep.Visible = !isAdmin;
            #endregion

            #region Nạp dữ liệu ban đầu
            // 1. Nạp danh sách Năm học, học kỳ

            // 2. SetHocKy
            #endregion
        }

        private void miHeThong_DangXuat_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có chắc chắn muốn đăng xuất không?", "Chú ý", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
            {
                DangXuat();
            }
        }

        private void miHeThong_QuanLyNguoiDung_Click(object sender, EventArgs e)
        {
            var dlg = new HeThong.FormQuanLyNguoiSuDung();
            dlg.ShowDialog(this);
        }

        private void miHeThong_Thoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        #endregion

        #region Trợ giúp
        private void miTroGiup_HuongDan_Click(object sender, EventArgs e)
        {
            try
            {
                System.Diagnostics.Process.Start("UserGuide.pdf");
            }
            catch (Exception ex)
            {
                MessageBox.Show("File UserGuide.pdf không được tìm thấy trong hệ thống. Chi tiết: " + ex.Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        #endregion


        private void miTroGiup_GioiThieuChuongTrinh_Click(object sender, EventArgs e)
        {
            var frm = new SWBetongXaydung.GUI.TroGiup.FormThongTinChuongTrinh();
            frm.ShowDialog();
        }

        private void miTacNghiep_Phanconglaixe_Click(object sender, EventArgs e)
        {
            if (GetActiveBaseUC() is UCBangPhanCongLaiXe)
                ;
            else
            {
                var frm = new UCBangPhanCongLaiXe() { Dock = DockStyle.Fill };
                pnlMain.Controls.Clear();
                pnlMain.Controls.Add(frm);
                this.Text = "PHÂN CÔNG LÁI XE";
            }
        }

        private void miTacNghiep_NhanNhienLieu_Click(object sender, EventArgs e)
        {
            if (GetActiveBaseUC() is UCCapNhienLieu)
                ;
            else
            {
                var frm = new UCCapNhienLieu() { Dock = DockStyle.Fill };
                pnlMain.Controls.Clear();
                pnlMain.Controls.Add(frm);
                this.Text = "CẤP NHIÊN LIỆU";
            }
        }

        private void miTacNghiep_CapBeTong_Click(object sender, EventArgs e)
        {
            if (GetActiveBaseUC() is UCCapBeTong)
                ;
            else
            {
                var frm = new UCCapBeTong() { Dock = DockStyle.Fill };
                pnlMain.Controls.Clear();
                pnlMain.Controls.Add(frm);
                this.Text = "CẤP BÊ TÔNG";
            }
        }

        private void miDuLieu_Xe_Click(object sender, EventArgs e)
        {
            if (GetActiveBaseUC() is UCXe)
                ;
            else
            {
                var frm = UCXe.getInstance(DockStyle.Fill);
                pnlMain.Controls.Clear();
                pnlMain.Controls.Add(frm);
                this.Text = "QUẢN LÝ XE";
            }
        }

        private void miDuLieu_Taixe_Click(object sender, EventArgs e)
        {
            if (GetActiveBaseUC() is UCTaiXe)
                ;
            else
            {
                var frm = new UCTaiXe() { Dock = DockStyle.Fill };
                pnlMain.Controls.Clear();
                pnlMain.Controls.Add(frm);
                this.Text = "QUẢN LÝ TÀI XẾ";
            }
        }

        private void miTacNghiep_QuyetToan_Click(object sender, EventArgs e)
        {
            if (GetActiveBaseUC() is UCQuyetToan)
                ;
            else
            {
                var frm = new UCQuyetToan() { Dock = DockStyle.Fill };
                pnlMain.Controls.Clear();
                pnlMain.Controls.Add(frm);
                this.Text = "QUYẾT TOÁN";
            }
        }

        private void miHeThong_DoiMatKhau_Click(object sender, EventArgs e)
        {
            var frm = new HeThong.FormDoiMatKhau(NguoiSuDung);
            frm.ShowDialog();
        }

        private void miThongKe_CapNhienLieu_Click(object sender, EventArgs e)
        {
            if (GetActiveBaseUC() is UCThongKe_CapNhienLieu)
                ;
            else
            {
                var frm = new UCThongKe_CapNhienLieu() { Dock = DockStyle.Fill };
                pnlMain.Controls.Clear();
                pnlMain.Controls.Add(frm);
                this.Text = "THỐNG KÊ CẤP NHIÊN LIỆU";
            }
        }

        private void miThongKe_NhienLieuTieuThu_Click(object sender, EventArgs e)
        {
            if (GetActiveBaseUC() is UCThongKe_NhienLieuTieuThu)
                ;
            else
            {
                var frm = new UCThongKe_NhienLieuTieuThu() { Dock = DockStyle.Fill };
                pnlMain.Controls.Clear();
                pnlMain.Controls.Add(frm);
                this.Text = "THỐNG KÊ NHIÊN LIỆU TIÊU THỤ";
            }
        }

        private void miThongKe_ThanhToanNhienLieu_Click(object sender, EventArgs e)
        {
            if (GetActiveBaseUC() is UCThongKe_ThanhToanNhienLieu)
                ;
            else
            {
                var frm = new UCThongKe_ThanhToanNhienLieu() { Dock = DockStyle.Fill };
                pnlMain.Controls.Clear();
                pnlMain.Controls.Add(frm);
                this.Text = "THANH TOÁN NHIÊN LIỆU";
            }
        }

        private void miThongKe_TongHopThanhToanNhienLieu_Click(object sender, EventArgs e)
        {
            if (GetActiveBaseUC() is UCThongKe_TongHopThanhToanNhienLieu)
                ;
            else
            {
                var frm = new UCThongKe_TongHopThanhToanNhienLieu() { Dock = DockStyle.Fill };
                pnlMain.Controls.Clear();
                pnlMain.Controls.Add(frm);
                this.Text = "TỔNG HỢP THANH TOÁN NHIÊN LIỆU";
            }
        }

        private void miDuLieu_DonGiaNhienLieu_Click(object sender, EventArgs e)
        {
            if (GetActiveBaseUC() is UCDonGiaNhienLieu)
                ;
            else
            {
                var frm = new UCDonGiaNhienLieu() { Dock = DockStyle.Fill };
                pnlMain.Controls.Clear();
                pnlMain.Controls.Add(frm);
                this.Text = "ĐƠN GIÁ NHIÊN LIỆU";
            }
        }
    }
}
